package 尚硅谷;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;

/**
 * @author zhangmin
 * @create 2022-04-07 22:07
 * 在JUC包下有一个LockSupport类，是用于创建锁和其他同步类的基本线程阻塞原语。可以理解为是线程等待唤醒机制（wait/notify）的一种支持。
 * LockSupport类使用了一种名为Permit（许可）的概念来做的阻塞和缓存线程，每个线程都有一个许可。许可的值只有0和1，默认是0，可用把它看作是互斥量
 *
 * 不需要在锁内部使用
 */
public class LockSupportDemo {
    public static void main(String[] args) throws InterruptedException {
        Thread a= new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"\t -----come in");
            LockSupport.park(); //被阻塞，等待通知，要通过需要许可
            System.out.println(Thread.currentThread().getName()+"\t -----被唤醒");
        },"A");
        a.start();

        Thread b= new Thread(()->{
            LockSupport.unpark(a); //被阻塞，等待通知，要通过需要许可
            System.out.println(Thread.currentThread().getName()+"\t -----通知");
        },"B");
        b.start();
    }
}
